package beans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.faces.event.ActionEvent;  
import javax.faces.context.FacesContext;  
import javax.faces.application.FacesMessage;

import entidad.Huesped;
import entidad.Pais;
import facade.HuespedFacadeRemote;

@ManagedBean
@SessionScoped
public class HuespedBean {
	@EJB
	private HuespedFacadeRemote huespedRemote;	
	
	private String numeroDoc;
	private String apellidos;
	private String correo;
	private String direccion;
	private String nombres;
	private String telefono;
	private String tipo;
	private String tipoDoc;
	private String trato;
	private Pais pais;	
	private String auxPais;	
	
	private String id;
	
	List<Huesped>  listarFiltro;
	List<Huesped>  listarTabla;
	
	public HuespedFacadeRemote getHuespedRemote() {
		return huespedRemote;
	}

	public void setHuespedRemote(HuespedFacadeRemote huespedRemote) {
		this.huespedRemote = huespedRemote;
	}

	public String getNumeroDoc() {
		return numeroDoc;
	}

	public void setNumeroDoc(String numeroDoc) {
		this.numeroDoc = numeroDoc;
	}

	public String getApellidos() {
		return apellidos;
	}

	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}

	public String getCorreo() {
		return correo;
	}

	public void setCorreo(String correo) {
		this.correo = correo;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public String getNombres() {
		return nombres;
	}

	public void setNombres(String nombres) {
		this.nombres = nombres;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public String getTipoDoc() {
		return tipoDoc;
	}

	public void setTipoDoc(String tipoDoc) {
		this.tipoDoc = tipoDoc;
	}

	public String getTrato() {
		return trato;
	}

	public void setTrato(String trato) {
		this.trato = trato;
	}

	public Pais getPais() {
		return pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}

	public String getAuxPais() {
		return auxPais;
	}

	public void setAuxPais(String auxPais) {
		this.auxPais = auxPais;
	}
	//--------------------------------------------------------
	public List<Huesped> getListarTabla(){
		return huespedRemote.Listar();
	}
	
	public List<Huesped> getListarFiltro(){
		try {
			return huespedRemote.Filtrar(numeroDoc);
		} catch (Exception e) {
			return null;			
		}
	}
	public void setListarFiltro(List<Huesped>  listarFiltro) {
		this.listarFiltro = listarFiltro;
	}
	
	public void setListarTabla(List<Huesped>  listarTabla) {
		this.listarTabla = listarTabla;
	}
	
	public ArrayList<SelectItem> getListarTipoDoc() {
		ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
		
		lista.add(new SelectItem("DNI","DNI"));
		lista.add(new SelectItem("Pasaporte","Pasaporte"));
		lista.add(new SelectItem("Carnet","Carnet"));
		
		return lista;
	}
	public ArrayList<SelectItem> getListarTipo() {
		ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
		
		
		lista.add(new SelectItem("Residente","Residente"));
		lista.add(new SelectItem("No Residente","No Residente"));
		
		return lista;
	}
	public ArrayList<SelectItem> getListarTrato() {
		ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
		
		lista.add(new SelectItem("Sr.","Sr."));
		lista.add(new SelectItem("Sra.","Sra."));
		lista.add(new SelectItem("Srta.","Srta."));
		
		return lista;
	}
	public String Save(ActionEvent e){
		Huesped objHuesped = new Huesped();
		objHuesped = huespedRemote.Find(numeroDoc);
		if(objHuesped==null){
			objHuesped = new Huesped();
			objHuesped.setNumeroDoc(numeroDoc);
			objHuesped.setNombres(nombres);
			objHuesped.setApellidos(apellidos);
			objHuesped.setCorreo(correo);
			objHuesped.setDireccion(direccion);
			objHuesped.setTelefono(telefono);
			objHuesped.setTipo(tipo);
			objHuesped.setTrato(trato);
			objHuesped.setTipoDoc(tipoDoc);
			
			Pais objPais = new Pais();
			objPais.setNombrePais(auxPais);
			objHuesped.setPai(objPais);
			
			huespedRemote.Save(objHuesped);
			AddInfo(e,"Save"); 
		}else{
			AddError(e,"No Save"); 
		}
		Init();
		return "formHuesped.xhtml";
	}
	
	public String Update(ActionEvent e){
		Huesped objHuesped = new Huesped();
		objHuesped = huespedRemote.Find(numeroDoc);
		if(objHuesped!=null){
			objHuesped = new Huesped();
			objHuesped.setNumeroDoc(numeroDoc);
			objHuesped.setNombres(nombres);
			objHuesped.setApellidos(apellidos);
			objHuesped.setCorreo(correo);
			objHuesped.setDireccion(direccion);
			objHuesped.setTelefono(telefono);
			objHuesped.setTipo(tipo);
			objHuesped.setTrato(trato);
			objHuesped.setTipoDoc(tipoDoc);
			
			Pais objPais = new Pais();
			objPais.setNombrePais(auxPais);
			objHuesped.setPai(objPais);
			huespedRemote.Update(objHuesped);
			AddInfo(e, "Update"); 
		}else{
			AddError(e, "No Update"); 
		}
		Init();
		return "formHuesped.xhtml";
	}
	public String Delete (ActionEvent e){
		Huesped objHuesped = new Huesped();
		objHuesped = huespedRemote.Find(numeroDoc);
		if(objHuesped!=null){
			huespedRemote.Delete(objHuesped.getNumeroDoc());
			AddInfo(e,"Delete"); 
		}else{
			AddError(e,"No Delete"); 
		}
		Init();
		return "formHuesped.xhtml";
	}
	public String Find (ActionEvent e){	
		Huesped objHuesped = new Huesped();		
		objHuesped=  huespedRemote.Find(numeroDoc);
		if(objHuesped!= null){
			
			setNumeroDoc(objHuesped.getNumeroDoc());
			setNombres(objHuesped.getNombres());
			setApellidos(objHuesped.getApellidos());
			setCorreo(objHuesped.getCorreo());
			setDireccion(objHuesped.getDireccion());
			setTelefono(objHuesped.getTelefono());
			setTipo(objHuesped.getTipo());
			setTrato(objHuesped.getTrato());
			setTipoDoc(objHuesped.getTipoDoc());
			setAuxPais(objHuesped.getPai().getNombrePais());
			
			AddInfo(e,"Find");  
		}else{	
			AddError(e,"No Find"); 
		}		
		return "formHuesped.xhtml";
	}
	//--------------------------------------------
	private void Init(){
		setNumeroDoc("");
		setNombres("");
		setApellidos("");
		setCorreo("");
		setDireccion("");
		setTelefono("");
		setTipo("");
		setTrato("");
		setTipoDoc("");
		setAuxPais("");	
	}
	
	public String getCount(){
    	return String.valueOf(getListarFiltro().size());
    }
	//-------------------------------------------------------
	public void AddInfo(ActionEvent actionEvent , String msg) {  
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, msg,""));  
    }  
  
    public void AddWarn(ActionEvent actionEvent) {  
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Sample warn message", "Watch out for PrimeFaces!"));  
    }  
  
    public void AddError(ActionEvent actionEvent, String msg) {  
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,msg ,""));  
    }  
  
    public void AddFatal(ActionEvent actionEvent) {  
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"Sample fatal message", "Fatal Error in System"));  
    } 

}
